package main

import "fmt"

type ValNode struct {
	row int
	col int
	val int
}

func main() {
	//1、先创建一个原始数组
	var chessMap [11][11]int
	chessMap[1][2] = 1 //1代表黑子，2代表白子
	chessMap[2][3] = 2

	//2、输出看看原始的数组
	for _, v := range chessMap {
		for _, v2 := range v {
			fmt.Printf("%d\t", v2)
		}
		fmt.Println()
	}
	//3、转成稀疏数组
	//（1）遍历chessmap，如果发现有一个元素的值不为零，创建一个node结构体
	//（2）将其放入到对应的切片中
	var sparseArray []ValNode
	//标准的一个稀疏数组应该还有一个记录元素的二维数组的规模（行，列，值）
	valNode := ValNode{
		row: 11,
		col: 11,
		val: 0,
	}
	sparseArray = append(sparseArray, valNode)
	for i, v := range chessMap {
		for j, v2 := range v {
			if v2 != 0 {
				//创建一个valNode值节点
				valNode := ValNode{
					row: i,
					col: j,
					val: v2,
				}
				sparseArray = append(sparseArray, valNode)
			}
		}
	}
	for i, node := range sparseArray {
		fmt.Printf("%d:%d %d %d\n", i, node.row, node.col, node.val)
	}

	//先创建一个原始数组
	var chessMap2 [11][11]int
	//遍历sparseArr【遍历文件每一行】
	for i, valNode := range sparseArray {
		if i != 0 { //跳过第一行
			chessMap2[valNode.row][valNode.col] = valNode.val
		}
	}
	//看看chessMap2 是不是回复
	for _, v := range chessMap2 {
		for _, v2 := range v {
			fmt.Printf("%d\t", v2)
		}
		fmt.Println()
	}
}
